1
|
|
|
/** |
2
|
|
|
* twig.js |
3
|
|
|
* https://github.com/schmittjoh/twig.js |
4
|
|
|
* |
5
|
|
|
* (C) 2011 Johannes M. Schmitt <[email protected]> |
6
|
|
|
* Licensed under the Apache 2.0 License. |
7
|
|
|
* |
8
|
|
|
* Portions of this code are from the Google Closure Library received |
9
|
|
|
* from the Closure Authors under the Apache 2.0 License. |
10
|
|
|
*/ |
11
|
|
|
(function() {var e=void 0,g=!0,i=null,l=!1;function m(a){return function(){return this[a]}}var n,p=this;function q(a,b,c){a=a.split(".");c=c||p;!(a[0]in c)&&c.execScript&&c.execScript("var "+a[0]);for(var d;a.length&&(d=a.shift());)!a.length&&b!==e?c[d]=b:c=c[d]?c[d]:c[d]={}} |
|
|
|
|
12
|
|
|
function r(a){var b=typeof a;if("object"==b)if(a){if(a instanceof Array)return"array";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if("[object Window]"==c)return"object";if("[object Array]"==c||"number"==typeof a.length&&"undefined"!=typeof a.splice&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("splice"))return"array";if("[object Function]"==c||"undefined"!=typeof a.call&&"undefined"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable("call"))return"function"}else return"null"; |
|
|
|
|
13
|
|
|
else if("function"==b&&"undefined"==typeof a.call)return"object";return b}function s(a){return"array"==r(a)}function t(a){return"string"==typeof a}function u(a){var b=typeof a;return"object"==b&&a!=i||"function"==b}var v="closure_uid_"+Math.floor(2147483648*Math.random()).toString(36),w=0;function x(a,b,c){return a.call.apply(a.bind,arguments)} |
|
|
|
|
14
|
|
|
function y(a,b,c){if(!a)throw Error();if(2<arguments.length){var d=Array.prototype.slice.call(arguments,2);return function(){var c=Array.prototype.slice.call(arguments);Array.prototype.unshift.apply(c,d);return a.apply(b,c)}}return function(){return a.apply(b,arguments)}}function z(a,b,c){z=Function.prototype.bind&&-1!=Function.prototype.bind.toString().indexOf("native code")?x:y;return z.apply(i,arguments)}function A(a,b){q(a,b,e)};var B=/&/g,C=/</g,D=/>/g,E=/\"/g,F=/[&<>\"]/,G={"\x00":"\\0","\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r","\t":"\\t","\x0B":"\\x0B",'"':'\\"',"\\":"\\\\"},H={"'":"\\'"};function I(a,b){a!=i&&this.append.apply(this,arguments)}I.prototype.b="";I.prototype.append=function(a,b,c){this.b+=a;if(b!=i)for(var d=1;d<arguments.length;d++)this.b+=arguments[d];return this};I.prototype.toString=m("b");function J(a,b,c){for(var d in a)b.call(c,a[d],d,a)}function K(a){var b=[],c=0,d;for(d in a)b[c++]=a[d];return b}function L(a){var b=[],c=0,d;for(d in a)b[c++]=d;return b}var M="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" ");function N(a,b){for(var c,d,f=1;f<arguments.length;f++){d=arguments[f];for(c in d)a[c]=d[c];for(var h=0;h<M.length;h++)c=M[h],Object.prototype.hasOwnProperty.call(d,c)&&(a[c]=d[c])}};var O=Array.prototype,P=O.indexOf?function(a,b,c){return O.indexOf.call(a,b,c)}:function(a,b,c){c=c==i?0:0>c?Math.max(0,a.length+c):c;if(t(a))return!t(b)||1!=b.length?-1:a.indexOf(b,c);for(;c<a.length;c++)if(c in a&&a[c]===b)return c;return-1},aa=O.forEach?function(a,b,c){O.forEach.call(a,b,c)}:function(a,b,c){for(var d=a.length,f=t(a)?a.split(""):a,h=0;h<d;h++)h in f&&b.call(c,f[h],h,a)};var ba=z,v="twig_ui_"+Math.floor(2147483648*Math.random()).toString(36);function R(a){return i===a||l===a||e===a||0===a?g:S(a)?0===T(a):l}function U(a,b){N.apply(i,Array.prototype.slice.call(arguments,0));return a}function S(a){return s(a)||t(a)||u(a)}function T(a){if(s(a))a=a.length;else if(t(a))a=a.length;else if(u(a)){var b=0,c;for(c in a)b++;a=b}else a=("number"===typeof a?a.toString():"").length;return a}function V(a,b,c){s(a)?aa(a,b,c):J(a,b,c)} |
|
|
|
|
15
|
|
|
function W(a){return a.replace(/[\.\\+*?\[\]<>(){}^$=!|:-]/g,"\\$&")};function X(a){this.env_=a;this.c=[];this.m={}}n=X.prototype;n.s=m("c");n.C=function(a){this.c=a};n.K=function(a){this.m=a};n.getParent=function(a){a=this.getParent_(a);return l===a?l:this.env_.d(a)};n.B=function(a,b,c){if(a in this.m){var d=new I;this.m[a](d,b,c||{});return d.toString()}d=this.getParent(b);if(l!==d)return d.k(a,b,c);throw Error("The template '"+this.o()+"' has no parent, and no trait defining the block '"+a+"'.");}; |
|
|
|
|
16
|
|
|
n.k=function(a,b,c){if(c&&a in c){var d=new I,f=c[a];delete c[a];f(d,b,c);return d.toString()}if(a in this.c)return d=new I,this.c[a](d,b,c||i),d.toString();d=this.getParent(b);return l!==d?d.k(a,b,c):""};n.j=function(a,b){var c=new I;this.render_(c,a||{},b||{});return c.toString()}; |
|
|
|
|
17
|
|
|
n.q=function(a,b,c,d){if(!a["get"+b])throw Error("The macro "+b+" is not defined in "+a.o()+".");if(d===e)return a["get"+b].apply(a,c);throw Error("Positional arguments, or default values in macro arguments are not supported, yet.");};function Y(a){this.r=a}Y.prototype.toString=m("r");function Z(a,b,c,d,f){if(f&&b instanceof Y)return b.toString();b=b==i?"":String(b);if(ca===c){a=String(b);if(a.quote)b=a.quote();else{b=['"'];for(c=0;c<a.length;c++){var h=a.charAt(c),k=h.charCodeAt(0),d=b,f=c+1,j;if(!(j=G[h])){if(!(31<k&&127>k))if(h in H)h=H[h];else if(h in G)h=H[h]=G[h];else{k=h;j=h.charCodeAt(0);if(31<j&&127>j)k=h;else{if(256>j){if(k="\\x",16>j||256<j)k+="0"}else k="\\u",4096>j&&(k+="0");k+=j.toString(16).toUpperCase()}h=H[h]=k}j=h}d[f]=j}b.push('"');b=b.join("")}return b.substring(1, |
|
|
|
|
18
|
|
|
b.length-1)}if(!c||da===c)return a=b,F.test(a)&&(-1!=a.indexOf("&")&&(a=a.replace(B,"&")),-1!=a.indexOf("<")&&(a=a.replace(C,"<")),-1!=a.indexOf(">")&&(a=a.replace(D,">")),-1!=a.indexOf('"')&&(a=a.replace(E,"""))),a;if(ea===c)return encodeURIComponent(b);throw Error("The type '"+c+"' is not supported.");}var da="html",ca="js",ea="url";function $(){this.a={};this.g={};this.h={};this.l={};this.f={};this.e={};this.p=l;this.L="UTF-8"}n=$.prototype;n.j=function(a,b){var c=this.d(a);return c.j.call(c,U({},this.e,b||{}))};n.filter=function(a,b,c){if(!(a in this.g))throw Error("The filter '"+a+"' does not exist.");return this.g[a].apply(i,Array.prototype.slice.call(arguments,1))};n.w=function(a,b,c){if(!(a in this.h))throw Error("The function '"+a+"' does not exist.");return this.h[a].apply(i,Array.prototype.slice.call(arguments,1))}; |
|
|
|
|
19
|
|
|
n.test=function(a,b,c){if(!(a in this.l))throw Error("The test '"+a+"' does not exist.");return this.l[a].apply(i,Array.prototype.slice.call(arguments,1))};n.escape=function(a,b,c,d){return Z(0,a,b,0,d)};n.z=function(a,b,c){var d=this.d(a),f=d["get"+b];if(!f)throw Error("The macro '"+b+"' does not exist on template '"+d.o()+"'.");return f.apply(d,Array.prototype.slice.call(arguments,2)).toString()};n.F=function(a,b){this.g[a]=b};n.G=function(a,b){this.h[a]=b};n.J=function(a,b){this.l[a]=b}; |
|
|
|
|
20
|
|
|
n.I=function(a){this.e=a};n.H=function(a,b){this.e[a]=b};n.u=m("e");n.i=function(){this.p=g;J(this.a,function(a){a.i()},this)};n.v=function(a){return a in this.a};n.getExtension=function(a){if(!(a in this.a))throw Error('The "'+a+'" extension is not enabled.');return this.a[a]};n.n=function(a){this.a[a.getName()]=a};n.A=function(a){delete this.a[a]};n.D=function(a){J(a,function(a){this.n(a)})};n.t=m("a"); |
|
|
|
|
21
|
|
|
n.d=function(a){var b=a[v]||(a[v]=++w);if(b in this.f)return this.f[b];l===this.p&&this.i();a=new a(this);return this.f[b]=a};window.Twig=new $;A("goog.provide",function(a){q(a)});A("goog.require",function(){}); |
|
|
|
|
22
|
|
|
A("twig.attr",function(a,b,c,d,f){d=d||"any";f=f!==e?f:l;if(!u(a)&&!s(a))return f?l:i;if(b in a){if("array"!==d&&"function"==r(a[b]))return f?g:a[b].apply(a,c||[]);if("method"!==d)return f?g:a[b]}if("array"===d||s(a))return f?l:i;var b=b.toLowerCase(),h="get"+b,k="is"+b,j;a:{b=function(a,b){b=b.toLowerCase();return b===h||b===k};for(j in a)if(b.call(e,0,j))break a;j=e}return j&&"function"==r(a[j])?f?g:a[j].apply(a,c||[]):f?l:i});A("twig.bind",ba); |
|
|
|
|
23
|
|
|
A("twig.inherits",function(a,b){function c(){}c.prototype=b.prototype;a.M=b.prototype;a.prototype=new c});A("twig.extend",U);A("twig.spaceless",function(a){return a.replace(/>[\s\xa0]+</g,"><").replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")});A("twig.range",function(a,b){for(var c=[];a<=b;a+=1)c.push(a);return c});A("twig.contains",function(a,b){var c;if(s(a))c=0<=P(a,b);else if(t(a))c=-1!=a.indexOf(b)&&(""!==b||""===a);else a:{for(c in a)if(a[c]==b){c=g;break a}c=l}return c});A("twig.countable",S); |
|
|
|
|
24
|
|
|
A("twig.count",T);A("twig.forEach",V);A("twig.empty",R);A("twig.createObj",function(a){for(var b={},c=0;c<arguments.length;c+=2)b[arguments[c]]=arguments[c+1];return b});A("twig.pregQuote",W);A("twig.filter.capitalize",function(a,b){return b.charAt(0).toUpperCase()+b.substring(1)});A("twig.filter.escape",Z);A("twig.filter.first",function(a,b){return s(b)?b[0]:u(b)?b[Object.keys(b)[0]]:t(b)?b.charAt(0):""});A("twig.filter.length",function(a,b){return T(b)}); |
|
|
|
|
25
|
|
|
A("twig.filter.def",function(a,b){return R(a)?b||"":a});A("twig.filter.replace",function(a,b){for(var c in b){var d;d=W(c);a=a.replace(RegExp(d,"g"),b[c])}return a});A("twig.filter.join",function(a,b){var c=b||"",d=new I,f=g;V(a,function(a){f||d.append(c);f=l;d.append(a)});return d.toString()});A("twig.filter.keys",L);A("twig.filter.upper",function(a,b){return b.toUpperCase()});A("twig.filter.lower",function(a,b){return b.toLowerCase()});A("twig.filter.nl2br",function(a){return a.replace(/\n/g,"<br />")}); |
|
|
|
|
26
|
|
|
A("twig.filter.abs",function(a){return Math.abs(a)});A("twig.filter.title",function(a,b){return b.split(" ").map(function(a){return a.charAt(0).toUpperCase()+a.substr(1).toLowerCase()}).join(" ")});A("twig.filter.trim",function(a,b){var c="\n ";b&&(c=W(b));a=a.replace(RegExp("^["+c+"]+"),"");return a=a.replace(RegExp("["+c+"]+$"),"")});A("twig.filter.json_encode",function(a){return JSON.stringify(a)}); |
|
|
|
|
27
|
|
|
A("twig.filter.last",function(a,b){if(s(b))return b[b.length-1];if(u(b)){var c=Object.keys(b);return b[c[c.length-1]]}return t(b)?b.charAt(b.length-1):""});A("twig.filter.reverse",function(a,b){if(s(b))return b.reverse();if(u(b)){for(var c={},d=L(b).reverse(),f=0;f<d.length;f++)c[d[f]]=b[d[f]];return c}return t(b)?b.split("").reverse().join(""):b}); |
|
|
|
|
28
|
|
|
A("twig.filter.batch",function(a,b,c){for(var d=Array(Math.ceil(a.length/b)),f=d.length*b,h=0;h<f;h++){var k=Math.floor(h/b);"undefined"===typeof d[k]&&(d[k]=[]);"undefined"!==typeof a[h]?d[k].push(a[h]):t(c)&&d[k].push(c)}return d}); |
29
|
|
|
A("twig.filter.merge",function(a,b){var c=[];if(s(a)&&s(b)){for(var d=c=a.concat(b),f={},h=0,k=0;k<d.length;){var j=d[k++],Q=u(j)?"o"+(j[v]||(j[v]=++w)):(typeof j).charAt(0)+j;Object.prototype.hasOwnProperty.call(f,Q)||(f[Q]=g,d[h++]=j)}d.length=h}else if(u(a)&&u(b)){d={};for(f in a)d[f]=a[f];c=d;J(b,function(a,b){c[b]=a})}return c});A("twig.functions.max",function(a){return s(a)?Math.max.apply(i,a):u(a)?Math.max.apply(i,K(a)):Math.max.apply(i,arguments)}); |
|
|
|
|
30
|
|
|
A("twig.functions.min",function(a){return s(a)?Math.min.apply(i,a):u(a)?Math.min.apply(i,K(a)):Math.min.apply(i,arguments)});A("twig.functions.random",function(a,b){return s(b)||t(b)?b[Math.floor(Math.random()*b.length)]:"number"==typeof b?Math.floor(Math.random()*b):b===i||"undefined"===typeof b?Math.floor(2147483647*Math.random()):""});A("twig.StringBuffer",I);I.prototype.append=I.prototype.append;I.prototype.toString=I.prototype.toString;A("twig.Environment",$);$.prototype.createTemplate=$.prototype.d; |
31
|
|
|
$.prototype.filter=$.prototype.filter;$.prototype.invoke=$.prototype.w;$.prototype.test=$.prototype.test;$.prototype.escape=$.prototype.escape;$.prototype.macro=$.prototype.z;$.prototype.setFilter=$.prototype.F;$.prototype.setFunction=$.prototype.G;$.prototype.setTest=$.prototype.J;$.prototype.render=$.prototype.j;$.prototype.getGlobals=$.prototype.u;$.prototype.setGlobals=$.prototype.I;$.prototype.setGlobal=$.prototype.H;$.prototype.initRuntime=$.prototype.i;$.prototype.hasExtension=$.prototype.v; |
32
|
|
|
$.prototype.getExtension=$.prototype.getExtension;$.prototype.addExtension=$.prototype.n;$.prototype.removeExtension=$.prototype.A;$.prototype.setExtensions=$.prototype.D;$.prototype.getExtensions=$.prototype.t;A("twig.Template",X);X.prototype.setTraits=X.prototype.K;X.prototype.setBlocks=X.prototype.C;X.prototype.getBlocks=X.prototype.s;X.prototype.renderParentBlock=X.prototype.B;X.prototype.renderBlock=X.prototype.k;X.prototype.callMacro=X.prototype.q;A("twig.Markup",Y);})(); |
33
|
|
|
|